#include <iostream>
#include <pthread.h>
#include <cstdio>
// 定义锁
pthread_mutex_t lock;
// 定义条件变量
pthread_cond_t cond;
// 设置票的数量为6张
int ticket = 6;

void *RunRoute(void *arg)
{
    // 分离自己，线程退出自动释放
    pthread_detach(pthread_self());
    while (true)
    {
        // 申请锁
        pthread_mutex_lock(&lock);
        // 等待条件变量
        pthread_cond_wait(&cond, &lock);
        if (ticket > 0)
        {

            std::cout << (char *)arg << "抢到了" << ticket << "号票" << std::endl;
            ticket--;
        }
        else
        {
            std::cout << "票卖完了" << std::endl;
            // 释放锁
            pthread_mutex_unlock(&lock);
            break;
        }
        // 释放锁
        pthread_mutex_unlock(&lock);
    }
}
int main()
{
    // 初始化锁
    pthread_mutex_init(&lock, nullptr);
    // 初始化条件变量
    pthread_cond_init(&cond, nullptr);
    pthread_t t1, t2, t3;
    // 创建线程
    pthread_create(&t1, NULL, RunRoute, (void *)"thread t1");
    pthread_create(&t2, NULL, RunRoute, (void *)"thread t2");
    pthread_create(&t3, NULL, RunRoute, (void *)"thread t3");
    // 主线程控制其他线程
    while (true)
    {
        // 通过回车来唤醒等待的线程
        getchar();
        // 唤醒等待队列中队头的线程
        pthread_cond_signal(&cond);
    }
    return 0;
}